package controllers

import (
	"gin-AssetManagement/models"
	"gin-AssetManagement/utils"
	"github.com/gin-gonic/gin"
	"net/http"
)

// LoginView 登录前端页面响应
// @Summary 登录前端页面响应
// @Schemes http
// @Tags 登录前端页面响应
// @Description 登录前端页面响应
// @Accept json
// @Produce json
// @Success 200 {json} {"code":0,"msg":"成功"}
// @Router /login [get]
func LoginView(g *gin.Context) {
	token, _ := g.Cookie("cookie")
	if token != "" {
		// 如果 cookie 不存在或为空，则跳转到登录页面
		g.Redirect(http.StatusFound, "/home/index")
	}
	g.HTML(http.StatusOK, "login/login.html", nil)
}

// Login 登录
// @Summary 登录
// @Schemes http
// @Tags 登录
// @Description 登录
// @Accept json
// @Produce json
// @Param name query string true "用户名"
// @param password query string true "密码"
// @Success 200 {json} {"code":0,"msg":"成功"}
// @Router /login [post]
func Login(g *gin.Context) {

	user := models.Users{}
	//user.Name = g.Query("name")
	user.Name, _ = g.GetPostForm("name")
	password, _ := g.GetPostForm("password")
	err := user.QueryUserName()
	if err != nil {
		g.JSON(http.StatusOK, Respond{
			Code: 1,
			Msg:  "用户名或密码错误",
			Data: nil,
		})
		return
	}
	if utils.Encryption(password, user.Salt) != user.PassWord {
		g.JSON(http.StatusOK, Respond{
			Code: 1,
			Msg:  "用户名或密码错误",
			Data: nil,
		})
		return
	}
	rolesIds, err := user.GetRoleIdByUserID()
	if err != nil {
		g.JSON(http.StatusOK, Respond{
			Code: 1,
			Msg:  "查询角色失败",
			Data: nil,
		})
		return
	}
	token, err := utils.MyCustomClaims(user.Name, user.ID, rolesIds)
	if err != nil {
		g.JSON(http.StatusNotFound, Respond{
			Code: 1,
			Msg:  "设置token失败",
			Data: nil,
		})
		return
	}
	//g.SetCookie("cookie", token, 3600, "/", "192.168.87.128", false, true) //这里因为我是部署在docker服务器上的，所以用这个
	g.SetCookie("cookie", token, 3600, "/", "localhost", false, true) //如果是本地就用这个
	g.JSON(http.StatusOK, Respond{
		Code: 0,
		Msg:  "登录成功",
		Data: nil,
	})

}
func Logout(g *gin.Context) {
	//g.SetCookie("cookie", "", -1, "/", "192.168.87.128", false, true) //同理上边
	g.SetCookie("cookie", "", -1, "/", "localhost", false, true) //同理上边
	g.Redirect(http.StatusFound, "/login")
}
